namespace CSharpPro._1028;

public class User
{
    private string _userName;
    private string _password;

    // 构造函数
    public User(string userName, string password)
    {
        UserName = userName;
        Password = password;
    }

    // 用户名属性（封装+验证规则）
    public string UserName
    {
        get => _userName;
        set
        {
            if (string.IsNullOrWhiteSpace(value))
                throw new ArgumentException("用户名不可为空");
            if (value.Length < 3 || value.Length > 15)
                throw new ArgumentException("用户名长度需为3-15个字符");
            if (!System.Text.RegularExpressions.Regex.IsMatch(value, @"^[a-zA-Z0-9_]+$"))
                throw new ArgumentException("用户名只能包含字母、数字、下划线");
            _userName = value;
        }
    }

    // 密码属性（封装+验证规则）
    public string Password
    {
        get => _password;
        set
        {
            if (string.IsNullOrWhiteSpace(value))
                throw new ArgumentException("密码不可为空");
            if (value.Length < 6 || value.Length > 20)
                throw new ArgumentException("密码长度需为6-20个字符");
            if (!System.Text.RegularExpressions.Regex.IsMatch(value, @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$"))
                throw new ArgumentException("密码需包含至少1个大写字母、1个小写字母和1个数字");
            _password = value;
        }
    }
}